---
title: 'docker-comose'
date: '2023-08-18'
lastmod: '2023-10-03'
tags: ['docker']
# draft: false
summary: 'docker-comose 是一个管理多个docker容器的工具，可以通过.yaml文件来管理多个容器的启动、停止、重启、日志查看等操作。'
# images: ['/static/images/twitter-card.png']
---



### 示例：
```shell
version: "3.1"

services:
  db:
    image: mysql:8
    command:
      --default-authentication-plugin=mysql_native_password
      --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
      --group_concat_max_len=102400
    restart: unless-stopped
    volumes:
      - ./data/mysql/:/var/lib/mysql/
    environment:
      TZ: Asia/Shanghai # 指定时区
      MYSQL_ROOT_PASSWORD: "nextjs" # 配置root用户密码
      MYSQL_DATABASE: "nextjs" # 业务库名
      MYSQL_USER: "nextjs" # 业务库用户名
      MYSQL_PASSWORD: "nextjs" # 业务库密码
    ports:
      - 3306:3306

  nextjs:
    build: .
    ports:
      - "3000:3000"
    environment:
      TZ: Asia/Shanghai # 指定时区
    container_name: nextjs
    volumes:
      - ./:/app/
    depends_on:
      - db
    restart: unless-stopped

  nginx:
    image: nginx:mainline-alpine
    container_name: nginxserver
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - ./.next:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d


networks:
  nodeapp-network:
    driver: bridge


```

```shell
# 启动服务
docker-compose -f docker-compose.yml up -d
#  Docker Compose v2+
docker compose -f docker-compose.yml up -d
```

> 操作要在当前 docker-compose.yml 文件目录下执行:docker-compose  up -d，或者显示的指定文件路径 docker-compose -f /home/website/next-blog/docker-compose.yml up -d


### 版本回退

在遇到线上版本问题时，我们要及时回退到之前稳定的版本
```shell
# 方式一 修改docker-compose.yml文件，将版本号修改为之前的版本号，然后重启服务
docker-compose down  # 停止并移除所有容器
docker-compose up -d  # 重新创建并启动容器


# 方式二 在创建 docker-compose.yml文件使标记 TAG 或者 IMAGE 注意：TAG 和 IMAGE 只能二选一，而且后面接 - 
# 没有 - 变量无法生效

services:
  db:
    image: mysql:${TAG:-8.0.45}
    # image: ${IMAGE:-mysql:8.0.45}

TAG=8.0.45 docker-compose up -d
IMAGE=mysql:8.0.45 docker-compose up -d

```

> docekr compose down 方式会将容器移除，docker ps 是不在容器列表上（不管是运行还是停止的）

> 在不执行 `docker-compose down` 的情况下，执行 `TAG=8.0.45 docker-compose up -d`，docker compose 会自动停止并移除旧的容器，然后创建新的容器，并启动。建议改为：TAG=8.0.45 docker-compose up -d --force-recreate 强制重建容器
